package com.base.web.core.util.jedis;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * Created with IntelliJ IDEA.
 * Description: jedis操作redis封装，并没有添加所有Api，需要时自行添加
 *  jedis api 学习地址
 *   https://www.cnblogs.com/relucent/p/4203190.html
 *   https://www.jianshu.com/p/125357ee7651
 * @Author: rentie
 * @Date: 2018/7/11 9:11
 */
public interface JedisService {

    /**
     * 保存数据到缓存
     * @param key
     * @param value
     * @return
     */
    Boolean set(String key, String value);

    /**
     * 保存数据到缓存并设置过期时间
     * @param key
     * @param value
     * @param time
     * @return
     */
    Boolean setex(String key, int time, String value);

    /**
     * 获得缓存值
     * @param key
     * @return
     */
    String get(String key);

    /**
     * 删除键
     * @param key
     * @return
     */
    Boolean del(String key);

    /**
     * 设置某个缓存的过期时间（以秒为单位）
     * @param key 键值
     * @param time 缓存时间
     */
    Boolean expire(String key, int time);

    /**
     * 移除给定key过期时间(设置这个key永不过期)
     * @param key
     */
    Boolean persist(String key);

    /**
     * 判断某个键是否存在
     * @return
     */
    Boolean exists(String key);

    /**
     * 查找特定的key(*为查找所有)
     * @param key
     * @return
     */
    Set<String> keys(String key);

    /**
     * 返回key所储存的值的类型
     * @param key
     * @return
     */
    String type(String key);

    /**
     * 清空所有数据库的key
     */
    Boolean flushAll();

    /**
     * 清空当前数据库的key
     */
    Boolean flushDB();

    /**
     * 返回key的个数
     * @return
     */
    Long dbSize();


    /**
     * List操作 左入栈
     * @param key
     * @param value
     */
    Boolean lpush(String key, String... value);

    /**
     * List操作 左出栈
     * @param key
     * @return
     */
    String lpop(String key);

    /**
     *List操作  右入栈
     * @param key
     * @param value
     */
    Boolean rpush(String key, String... value);

    /**
     *List操作  右出栈
     * @param key
     * @return
     */
    String rpop(String key);

    /**
     * 获得List元素个数
     * @param key
     * @return
     */
    Long llen(String key);

    /**
     * Set操作 set添加一个或多个数据
     * @param key
     * @param value
     */
    Boolean sadd(String key, String... value);

    /**
     * Set操作 获得所有元素
     * @param key
     * @return
     */
    Set<String> smembers(String key);

    /**
     * 删除set中指定一个或多个元素
     * @param key
     * @param value
     */
    Boolean srem(String key, String... value);

    /**
     * 随机Set中的一个元素
     * @param key
     */
    String spop(String key);

    /**
     * 获得Set中的元素个数
     * @param key
     * @return
     */
    Long scard(String key);

    /**
     *散列hash保存Map
     * @param key
     * @param map
     */
    Boolean hmset(String key, Map<String, String> map);

    /**
     * 散列hash 单个值保存
     * @param key 缓存键值
     * @param field 映射表键
     * @param value 映射表值
     */
    Boolean hset(String key, String field, String value);

    /**
     * 散列hash获得所有键值对
     * @param key
     * @return
     */
    Map<String,String> hgetAll(String key);

    /**
     * 散列hash获得所有键
     * @param key
     * @return
     */
    Set<String> hkeys(String key);

    /**
     * 散列hash获得所有值
     * @param key
     * @return
     */
    List<String> hvals(String key);

    /**
     * 删除一个或多个键值对
     * @param key 缓存键
     * @param field 映射表键
     */
    Boolean hdel(String key, String... field);

    /**
     * 判断hash中是否存在某个键值对
     * @param key 缓存键
     * @param field 映射表键
     * @return
     */
    Boolean hexists(String key, String field);

    /**
     * 获取hash中的指定键值
     * @param key 缓存键
     * @param field 映射表键
     * @return
     */
    List<String> hmget(String key, String... field);

}